package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.bean.PageRes;
import com.example.demo.bean.sysfile.SysFileCateDO;
import com.example.demo.bean.sysfile.SysFileDO;
import com.example.demo.exception.OtherException;
import com.example.demo.mapper.sysfile.SysFileCateMapper;
import com.example.demo.mapper.sysfile.SysFileMapper;
import com.example.demo.service.ISysFileCateService;
import com.example.demo.dto.sysfile.SysFileCatePageReqVO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class SysFileCateServiceImpl extends ServiceImpl<SysFileCateMapper, SysFileCateDO> implements ISysFileCateService {

    @Resource
    private SysFileCateMapper sysFileCateMapper;

    @Resource
    private SysFileMapper sysFileMapper;

    @Override
    public PageRes<SysFileCateDO> list(SysFileCatePageReqVO sysFileCatePageReqVO) {
        return sysFileCatePageReqVO.getPageSize() == -1
                ? sysFileCateMapper.selectNotPage(sysFileCatePageReqVO)
                : sysFileCateMapper.selectPage(sysFileCatePageReqVO);
    }

    @Override
    public int addSysFileCate(SysFileCateDO sysFileCateDO) {
        return sysFileCateMapper.insert(sysFileCateDO);
    }

    @Override
    @Transactional
    public int deleteSysFileCate(SysFileCateDO sysFileCateDO) {
        validSysFileCateExist(sysFileCateDO.getId());
        // 清空该分类下文件的分类信息
        SysFileDO updateFile = new SysFileDO().setCid(0L);
        QueryWrapper<SysFileDO> updateWrapper = new QueryWrapper<>();
        updateWrapper.eq("cid",sysFileCateDO.getId());
        int result = sysFileCateMapper.deleteById(sysFileCateDO);
        if(result > 0){
            return sysFileMapper.update(updateFile,updateWrapper);
        }else{
            return -1;
        }
    }

    @Override
    public int updateSysFileCate(SysFileCateDO sysFileCateDO) {
        validSysFileCateExist(sysFileCateDO.getId());
        return sysFileCateMapper.updateById(sysFileCateDO);
    }

    @Override
    public SysFileCateDO getSysFileCate(SysFileCateDO sysFileCateDO) {
        validSysFileCateExist(sysFileCateDO.getId());
        return sysFileCateMapper.selectById(sysFileCateDO.getId());
    }

    private void validSysFileCateExist(Long id){
        SysFileCateDO exist = sysFileCateMapper.selectById(id);
        if(exist == null){
            throw new OtherException("文件分类不存在");
        }
    }
}
